package models;

import models.msgs.Card;

public class Sys {
	/*Pola*/
	
	private int i;

	/*konstruktory*/
	public Sys() {}
	
	/*Metody*/
	
	public int OnePair(Card cards[]){    //Sprawdzenie czy jest para
		i=0;
		while(i<4){
			if (cards[i].rank==cards[i+1].rank){
				return 8;
			}	
			i++;
		}
		return 9;
	}
	
	public int TwoPair(Card cards[]){  //Sprawdzanie czy są 2 pary
		i=0;
		int counter=0;
		while(i<4){
			if (cards[i].rank==cards[i+1].rank){
				counter+=1;
				i++;
			}	
			i++;
		}
		if(counter==2)
			return 7;
		else
			return 9;
	}
	
	public int Three(Card cards[]){  //Sprawdzanie czy jest trójka
		i=0;
		while(i<3){
			if (cards[i].rank==cards[i+2].rank){
				return 6;
			}	
			i++;
		}
		return 9;
	}
	
	public int Strit(Card cards[]){  //Sprawdzanie czy jest strit
		i=0;
		while(i<4){
			if((cards[i].rank+1)==cards[i+1].rank){
				i++;
			}
			else
				return 9;
		}
		return 5;
	}
	
	public int Color(Card cards[]){  //Sprawdzanie czy jest kolor
		i=0;
		while(i<4){
			if(cards[i].color==cards[i+1].color){
				i++;
			}
			else
				return 9;
		}
		return 4;
	}
	
	public int Full(Card cards[]){  //Sprawdzanie czy jest Full
		if(((cards[0].rank==cards[2].rank)&&(cards[3].rank==cards[4].rank))||((cards[0].rank==cards[1].rank)&&(cards[2].rank==cards[4].rank)))
			return 3;
		return 9;
	}
	
	public int Four(Card cards[]){  //Sprawdzanie czy jest kareta
		if ((cards[0].rank==cards[3].rank)||(cards[1].rank==cards[4].rank)){
			return 2;
		}	
		return 9;
	}
	
	public int Poker(Card cards[]){  //Sprawdzanie czy jest Poker
		if((Color(cards)==4)&&(Strit(cards)==5))
			return 1;
		return 9;
	}
	
	public int HighCard(Card cards[],int number){  //Sprawdzanie jaka karta jest najwyższa		
		return cards[number].rank;
	}
	
	public int Play(Card cards[]){
		if((cards[0].rank == -1)&&(cards[0].color == -1))
			return 10;
		else
			return 9;
	}
	
	public int syst(Card cards[]){
		if(Play(cards)==10)
			return 10;
		if(OnePair(cards)==8){
			if(Four(cards)==2)
				return 2;
			if(Three(cards)==6){
				if(Full(cards)==3)
					return 3;
				else
					return 6;
			}
			if(TwoPair(cards)==7)
				return 7;
			return 8;
		}
		else{
			if(Strit(cards)==5)
				return 5;
			if(Color(cards)==4)
				return 4;
			if(Poker(cards)==1)
				return 1;
		}
		return 9;
	}

	public int TieCards(Card cards[],int sys){
		if(sys==1)
			return cards[4].rank;
		if(sys==2)
			return cards[2].rank;
		if(sys==3)
			return cards[2].rank;
		if(sys==5)
			return cards[4].rank;
		return cards[2].rank;		//dla sys=6
	}
		
	/*public int TieNumber(Card cards[],int numb){	//zwraca kolejne karty od najwiekszej dla 0 i 4
			return HighCard(cards,numb);
	}*/

	public int TieTwoPair(Card cards[],int number){  //number: 0 pierwsza para, 1 druga para, 2 kicker
		if(number==0)
			return cards[3].rank;
		if(number==1)
			return cards[1].rank;
		else
			if(cards[0].rank!=cards[1].rank)
				return cards[0].rank;
			if(cards[4].rank!=cards[3].rank)
				return cards[4].rank;
			else
				return cards[2].rank;
	}
	
	public int TieOnePair(Card cards[],int numb){  //number: 5 para, 0-4 kolejne najwieksze karty
		int j;
		if(numb==5)
			for(j=0;j<4;j++){
				if(cards[j].rank==cards[j+1].rank)
					return cards[j].rank;
			}
		return cards[numb].rank;
	}

	public int Tie(Card cards1[],Card cards2[],int sys){
		int pierwszy,drugi;
		if(sys==8)
			for(i=5;i>=0;i--){
				pierwszy = TieOnePair(cards1,i);
				drugi = TieOnePair(cards2,i);
				if(pierwszy > drugi)
					return 1;
				if(pierwszy < drugi)
					return 2;	
			}
		if(sys==7)
			for(i=0;i<3;i++){
				pierwszy = TieTwoPair(cards1,i);
				drugi = TieTwoPair(cards2,i);
				if(pierwszy > drugi){
					return 1;}
				if(pierwszy < drugi){
					return 2;}	
			}
		if((sys==9)||(sys==4))
			for(i=4;i>0;i--){
				pierwszy = HighCard(cards1,i);
				drugi = HighCard(cards2,i);
				if(pierwszy > drugi)
					return 1;
				if(pierwszy < drugi)
					return 2;
			}
		else{
			pierwszy = TieCards(cards1,sys);
			drugi = TieCards(cards2,sys);
			if(pierwszy > drugi)
				return 1;
			if(pierwszy < drugi)
				return 2;
		}
		return 0;
	}
}
